Embodiments relate generally to data storage environments, and, more particularly, to writable snapshots of file systems in data storage systems.
A file system is a collection of files and directories plus operations on them. To keep track of files, file systems have directories. A directory entry provides the information needed to find the blocks associated with a given file (e.g., or, typically, the directory entry includes an i-number that refers to an i-node, and the i-node includes information needed to find the blocks). Many file systems today are organized in a general hierarchy (e.g., a tree of directories) because it gives users the ability to organize their files by creating subdirectories. Each file may be specified by giving the absolute path name from the root directory to the file. Every file system contains file attributes such as each file owner and creation time and must be stored somewhere such as in a directory entry.
A snapshot of a file system will capture the content (e.g., files and directories) at an instant in time. A snapshot typically results in two data images: (1) the snapshot data (e.g., pointers, indices, metadata, etc. to record the contents of the file system at that moment in time); and (2) the active data that an application can read and write as soon as the snapshot is created (i.e., the active file system). Snapshots can be taken periodically, hourly, daily, weekly, on user demand, or at any other useful time or increment. They are useful for a variety of applications including recovery of earlier versions of a file following an unintended deletion or modification, backup, data mining, or testing of software.
Providing high data availability often involves frequent snapshots that consume resources, such as memory, internal memory bandwidth, storage device capacity, and storage device bandwidth. A number of techniques exist for managing the allocation of space in the storage devices, keeping track of the blocks of a given file, and making snapshots of file systems work efficiently and reliably. However, to date, the snapshots and the techniques associated with them allow a user only to capture a “frozen” version of the file system.
Typical snapshots are read-only versions of the file system as it existed at the moment of the snapshot's creation. While these snapshots can be extremely useful for file system recovery and other functions, they are still limited. Operations that need to be able to affect the data cannot operate on a read-only snapshot. For example, it may be desirable to effectively maintain multiple “active” (i.e., writable) versions of the file system for use in supporting maintenance, testing, development, and other functions.